﻿using HuangCanAPI.CustomAttribute;
using HuangCanAPI.Models;
using JWT.Algorithms;
using JWT.Serializers;
using JWT;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using System.Web.UI.WebControls;

namespace HuangCanAPI.Controllers
{
    /// <summary>
    ///  类 webapi控制器
    ///  访问地址（根据路由模板）：api/Login
    ///  对应当前控制器
    ///  
    ///  根据请求方法（谓词） get post put delete
    ///  对应
    ///  类中的方法  以 get、post、put、delete ... 开头的方法名
    ///  
    ///  不以http谓词开头，如果有特性，就按照特性来
    ///  以上都不是，则与post请求对应
    /// </summary>
    /// 

    //[ApiAuthorize]
    public class LoginController : BaseController
    {
        // 请求参数不一样，这两个post请求都能执行

        /// <summary>
        /// post请求
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        //public string xxxx(string username)
        //{
        //    return "xxxx" + username;
        //}

        /// <summary>
        /// post请求
        /// </summary>
        /// <param name="id">可以获取查询参数也可以获取路由参数</param>
        /// <returns></returns>
        //public string yyyy(string id)
        //{
        //    return "yyyy" + id;
        //}

        /// <summary>
        /// http://localhost:52920/zzzz/小小
        /// 可以指定参数
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        //[Route("zzzz/{name}")]
        //public string zzzz(string name)
        //{
        //    return "zzzz" + name;
        //}
        public ResponseVO Login([FromBody] LoginVO loginVO)
        {
            if (loginVO.Username == "admin" && loginVO.Password == "admin")
            {
                // 当用户登录成功时，客户端需要返回一个token给用户，当用户再次登录时
                // 需要将这个token值在次传递给客户端，但是因为token值不存在用户客户端中，
                // 所以需要对token采取解密，在通过解密的结果进行后续的操作

                // 以下代码是实现客户端创建一个token值返回给用户 
                // 生成一个token，并且把token保存到某个位置
                const string secretKey = "qzjmh";//口令加密秘钥（应该写到配置文件中）
                byte[] key = Encoding.UTF8.GetBytes(secretKey);
                IJwtAlgorithm algorithm = new HMACSHA256Algorithm();//加密方式
                IJsonSerializer serializer = new JsonNetSerializer();//序列化Json
                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();//base64加解密
                IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);//JWT编码
                var token = encoder.Encode(loginVO, key);//生成令牌
                // 成功将返回token值
                return new ResponseVO { Code = "000000", Message = "登录成功", Data = token };

            }
            else
            {
                return new ResponseVO { Code = "111111", Message = "登录失败" };
            }
        }

        [ApiAuthorize]
        public string Get()
        {
            return "测试";
        }


        /// <summary>
        /// 预检
        /// 测试当前请求是否支持跨域
        /// </summary>
        //public void options()
        //{

        //}


    }
}